#pragma once
#include <vector>
#include <utility>
#include <string>
#include <iostream>
using namespace std;

typedef pair<string, int> token;

class node
{
public:
    token t;
    vector<node*> sub;
    void add(node* n) { sub.push_back(n); }
    void add(token t) { sub.push_back(new node(t)); }
    node(token t) : t(t) {}

    ~node()
    {
        for(auto i : sub)
            delete i;
    }

    void output(int tab=0)
    {
        for(int i=0;i<tab;i++)
            cout<<"\t";
        cout<<t.first<<" "<<t.second<<endl;
        for(node* n : sub)
            n->output(tab+1);
    }
};
